/**
 * 日期工具类
 * @type {{}}
 */
export const DateUtil = {
  /**
   * 格式转换
   * @param date
   * @param formatStr
   */
  format(date, formatStr) {
    const o = {
      // 月份
      'M+': date.getMonth() + 1,
      // 日
      'd+': date.getDate(),
      // 小时
      'h+': date.getHours(),
      // 分
      'm+': date.getMinutes(),
      // 秒
      's+': date.getSeconds(),
      // 季度
      'q+': Math.floor((date.getMonth() + 3) / 3),
      // 毫秒
      S: date.getMilliseconds()
    };
    if (/(y+)/.test(formatStr)) {
      formatStr = formatStr.replace(RegExp.$1, `${date.getFullYear()}`.substring(4 - RegExp.$1.length));
    }

    Object.entries(o).forEach(([k, v]) => {
      if (new RegExp(`(${k})`).test(formatStr)) {
        formatStr = formatStr.replace(RegExp.$1, RegExp.$1.length === 1 ? v : (`00${v}`).substring(`${v}`.length));
      }
    });

    return formatStr;
  }
};

export default {
  /**
   * 获取地址栏query参数
   * @param url
   */
  getUrlParam(url = location.href) {
    let paramStr = url.split('?')[1];
    const param = {};
    if (paramStr) {
      paramStr = paramStr.replace('#/', '');
      const paramArr = paramStr.split('&');
      paramArr.forEach(item => {
        const [key, value] = item.split('=');
        param[key] = (value === 'undefined' || value === 'null') ? '' : value;
      });
    }

    return param;
  },

  // 创建一个指定长度且由字母和数字组成的随机字符串
  getRandomStr(len) {
    let str = '';
    for(; str.length < len; str += Math.random().toString(36).substr(2)){}
    return str.substr(0, len);
  }
}

export const type = {
  /**
   * 获取对象的类型
   * @param obj
   * @returns {string}
   */
  getType(obj) {
    return Object.prototype.toString.call(obj);
  },

  //判断是否对象
  isObject(num) {
    return this.getType(num) === '[object Object]';
  },

  // 判断变量是否为String对象
  isString(str) {
    return this.getType(str) === '[object String]';
  },

  // 判断变量是否为Array对象
  isArray(arr) {
    return this.getType(arr) === '[object Array]';
  },

  // 判断变量是否为Date对象
  isDate(date) {
    return this.getType(date) === '[object Date]';
  },

  // 判断变量是否为Function对象
  isFunction(fn) {
    return this.getType(fn) === '[object Function]';
  }
};
